/*--------------------------------------------------------------
 * File: devBML04.h 编码类型：C语言  UTF-8
 * Author WRS (1352509846@qq.com)
 * 功能: 
 * Version 0.1
 * Date 2024-09-25 
 * 
 * @copyright Copyright (c) 2024
 * 
----------------------------------------------------------------*/
#ifndef __DEVBML04_H
#define	__DEVBML04_H

#ifdef __cplusplus
extern "C" {
#endif
#include "stdio.h"
#include "stdint.h"
#include "esp_err.h"
#include "devPublic.h"

#define BML04_DOChannel      4      // DO 通道个数
#define BML04_DIChannel      1      // DI 通道个数
#define BML04_AOChannel      0      // AO 通道个数
#define BML04_AIChannel      4      // AI 通道个数

#define BML04_DO_CH0     0x30
#define BML04_DO_END     (BML04_DO_CH0 + BML04_DOChannel)
#define BML04_DI_CH0     0x50
#define BML04_DI_END     (BML04_DI_CH0 + BML04_DIChannel)
#define BML04_AO_CH0     0x70
#define BML04_AO_END     (BML04_AO_CH0 + BML04_AOChannel)
#define BML04_AI_CH0     0x90
#define BML04_AI_END     (BML04_AI_CH0 + BML04_AIChannel)

#define BML04_MAX_NUM   6       // 4路照明设备最大个数

extern char devBML04_Name[20];

typedef struct
{
    DevSave_t saveflag;         // 是否保存
    uint8_t saveNum;            // 设备个数
    Dev_state_t saveState;      // 当前状态 
    uint8_t saveAddr[BML04_MAX_NUM]; // 设备地址  
}__attribute__((packed)) bml04_save_t;
extern bml04_save_t bml04_saveinfo;

typedef struct
{
    DevSave_t dev_flag;         // 是否保存
    uint8_t devType;            // 设备类型
    uint16_t devLEDtime;        // 设备LED灯闪烁速度
    uint8_t dev_num;            // 设备个数
    uint8_t dev_index;          // 设备索引号    
    uint8_t dev_SCRindex;       // 设备界面选择的设备地址索引号
    uint8_t devAddrNow;         // 当前选中的设备地址
    uint8_t dev_Addrindex;      // 收到指令里设备地址索引号
    uint8_t devAddrTemp;        // 临时地址
    Dev_state_t dev_state;      // 当前状态 
    uint8_t devAddr[BML04_MAX_NUM]; // 设备地址       
    float dev_AI[BML04_MAX_NUM][BML04_AIChannel];   // 设备AI值
    uint8_t dev_DO[BML04_MAX_NUM][BML04_DOChannel]; // 设备DO值
    Random_em dev_Random_mode[BML04_MAX_NUM];       // 随机数模式
    Random_em dev_AI_SDmode[BML04_MAX_NUM][BML04_AIChannel];       // 配置文件中指定的每个通道的随机数模式
    float dev_AI_SDrange[BML04_MAX_NUM][BML04_AIChannel][3];       // 配置文件中指定的每个通道的随机数范围
    char dev_AI_dataFileName[BML04_MAX_NUM][40];    // 配置文件名

}__attribute__((packed)) bml04_t;// 数据对齐：某些结构体在存储时可能会有数据对齐问题。可以使用 __attribute__((packed)) 来避免编译器对结构体进行对齐。
extern bml04_t bml04_info;

void bml04_info_Init(void);
void devBML04_Start(void);
void devBML04_Stop(void);

void VARTable_RecVar_BML04(uint32_t ctrl, uint8_t *pValue, void *pVarDes);
uint32_t VARTable_RecVarR_BML04(uint32_t ctrl, uint8_t *pValue, void *pVarDes, uint8_t *devaddr);
#ifdef __cplusplus
}
#endif


#endif
